﻿/**
* @projectName   cvvision
* @file          IBLLNodeParam
* @brief         BLL层节点参数
* @author        GuoFeng
* @contact        805305774@qq.com/feng.guo@micro-i.com.cn
* @date          2022-03-10
*/

#ifndef IBLLNODEPARAM_H
#define IBLLNODEPARAM_H

#include <QObject>
#include "Interface_Global.h"
#include "IAlgorithmPluginParam.h"
#include "IAlgorithmPluginOperator.h"
#include "IPluginParam.h"
#include "IBLLOperator.h"

namespace CVV {
namespace Interface {

class INTERFACE_EXPORT IBLLNodeParam : public QObject
{
    Q_OBJECT
public:
    explicit IBLLNodeParam(QObject *parent = nullptr);
    virtual ~IBLLNodeParam();

    IBLLNodeParam(const IBLLNodeParam &obj);
    IBLLNodeParam& operator =(const IBLLNodeParam &obj);

    QString m_strPluginCode;                                    // 插件code
    QString m_strPluginId;                                      // 插件单元id
    QString m_strPreId;                                         // 前节点id
    IAlgorithmPluginOperator* m_pAlgOper{nullptr};              // 算法操作
    std::shared_ptr<IAlgorithmPluginParam> m_pAlgParam{nullptr};                // 算法参数
    std::shared_ptr<IPluginParam> m_pOutParam{nullptr};                         // 运行结果输出
    std::shared_ptr<IBLLOperator> m_pBLLOper{nullptr};                          // 标准业务逻辑执行句柄
    bool m_isExternalInputPlugin{false};                        // 是否外部输入插件：如网络图像/数据接收

    QList<QList<IBLLNodeParam>> m_lstYesNode;                   // yes分支节点 平行分支默认都是yes
    QList<QList<IBLLNodeParam>> m_lstNoNode;                    // no分支节点
    QString m_strBranchType;                                    // 分支类型，parallel/if/while。。。。
    QString m_inputImageHeader;                                 // 输入图像头部信息
    cv::Mat  m_inputImage;                                       // 输入图像信息
    QList<CVV::Interface::IBLLNodeParam> m_lstSubFlowNode;      // 解析的子流程节点 <节点>
};


}
}
#endif // IBLLNODEPARAM_H
